#include <stdio.h>
#include <math.h>
//1️⃣求Sn=a+aa+aaa+aaaa+aaaaa+……前n项之和，其中a是一个数字
int Sn(int a,int n)  
{
    int i=0;
    int s=0;
    for(i=0;i<n;i++)
    {
        s=s+a*pow(10,i)*(n-i); //第一种方法：个位数的和+十位数的和+百位数的和+……
    }
    return s;
}
int main()
{
    int a,n;
    scanf("%d %d",&a,&n);
    int i,k=0,s=0;
    for(i=0;i<n;i++)
    {
        k=k*10+a;     //第二种方法：求出每个数再相加
        s+=k;
    }
    printf("%d\n",s);
    printf("%d\n",Sn(a,n));
    return 0;
}
//2️⃣水仙花数：指一个3位数，其各位数字的3次方之和等于该数本身 eg:153=1^3+5^3+3^3
//打印0~100000之间所有"水仙花数"(非严格意义上的水仙花数，指一个n位数，其各位数字的n次方之和等于该数本身)
int weishu(int i)
{
    int n=1; //因为i<10时，i/10值为0，跳出循环,但此时还有一位数,所以最开始时n就赋值为1
    //或者理解为 任何一个数至少是一位数
    while(i/=10)
    {
        n++;
    }
    return n;
}
int shuixian(int i,int n)
{
    int k,s=0;
    for(k=0;k<n;k++)
    {
        s+=pow(i%10,n); //求次方
        i=i/10;
    }
    return s;
}
int main()
{
    int i;
    int n;
    for(i=0;i<100001;i++)
    {
        n=weishu(i); //计算i是几位数
        if(i==shuixian(i,n))
        printf("%d ",i);
    }
    return 0;
}
//3️⃣喝汽水，1瓶汽水1元，2个空瓶可以换一瓶汽水，给20元，有多少汽水
int main()
{
    int n; //钱数
    scanf("%d",&n);
    int s=n;//汽水总数
    int k=n;//空瓶总数 k>=2才能置换
    while(k>=2)
    {
        s+=k/2;
        k=k%2+k/2; //下一次空瓶总数=上一次空瓶兑换的整数+上一次空瓶兑换的余数
    }
    printf("%d",s);
    return 0;
}
//20——>+10——>+5——>+2——>+1——>+1 =39
//+5那里余下一个空瓶，和倒数第二+1的空瓶组成2个，又兑换了最后一个+1
//找规律发现或数学推导：汽水总数=钱数*2-1
int main()
{
    int n; //钱数
    scanf("%d",&n);
    if(n>0)
    printf("%d",2*n-1);
    else
    printf("%d",0);
    return 0;
}
//4️⃣将一句话的单词进行倒置，标点不倒置。比如 I like beijing. 经过函数后变为：beijing. like I
//思路：I like beijing.
//逆序：.gnijieb ekil I
//逆序：beijing. like I
#include <string.h>
void reverse_string(char *star,char *end)
{
    while(star<end)
    {
        int tmp=*star;
        *star=*end;
        *end=tmp;
        star++;
        end--;
    }
}
int main()
{
    char arr[100]="I like beijing.";
    gets(arr);
    int len=strlen(arr);
    reverse_string(arr,arr+len-1); //逆序整句话
    //把每个单词逆序
    int i;
    char*star =arr;//这里用一个新的指针变量接收arr
    for(i=0;i<=len;i++)
    {
        if(arr[i]==' '||arr[i]=='\0')
        {
            reverse_string(star,arr+i-1);
            star=arr+i+1;
            //arr=arr+i+1;这样写是错的，arr是一个指针常量，不能被重新赋值 P60
        }
    }
    printf("%s\n",arr);
    return 0;
}
